'''
  ListNode* t = head->next->next; //记录下一次要处理的节点的指针, 这个指针因为需要在本次循环内被我们处理, 所以需要用t记录下
            head->next->next = cur; //将正在处理的节点的next指针, 指向上一个已经处理完的节点
            cur = head->next; //当前节点已经处理完毕, 满足[cur = 最新已经处理完的节点] 这个定义, 所以需要将head->next这个已经处理完的节点赋值给cur
            head->next = t; // head->next 重新指向了下一个需要处理的节点
'''


class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        # 申请两个节点，pre和 cur，pre指向None
        pre = None
        cur = head
        # 遍历链表，while循环里面的内容其实可以写成一行
        # 这里只做演示，就不搞那么骚气的写法了
        while cur:
            # 记录当前节点的下一个节点
            tmp = cur.next
            # 然后将当前节点指向pre
            cur.next = pre
            # pre和cur节点都前进一位
            pre = cur
            cur = tmp
        return pre
